package com.yuw.dz;

public class TestDriver01 {
    /*
    因为在一个public类中只能有一个main方法作为程序执行的入口，且只有一个程序执行的入口；
    所以：main中可以通过调用子方法的方式，来执行子方法
     */
    public static void main(String[] args) {
        // 调用子方法进行显示
        test01();
        System.out.println("==================================================");
        test02();
        System.out.println("==================================================");
        test03();
    }

    // 定义一个子方法，用于展示一个知识点的代码

    /**
     * 运算符的使用：常用的运算符
     */
    private static void test03() {
        // 算术运算

        short shVal0 = 13;
        // 运算表达式中的默认转换
        int iResult = shVal0 % 3;
        System.out.println("iResult=" + iResult);

        int iVal10 = 3;
        // 4.0默认为double类型
        double dResult10 = iVal10 * 4.0;
        int iResult11 = iVal10 * 4;
        System.out.println("dResult10=" + dResult10 + "\niResult11=" + iResult11);
    }

    /**
     * 数据类型转换：默认类型转换和强制类型转换
     */
    private static void test02() {
        // 默认类型转换

        byte bVal0 = 1;
        int iVal0;
        short shVal0;
        // 低到高的默认类型转换
        iVal0 = bVal0;
        // byte转换为int
        shVal0 = bVal0;

        char chVal0 = 'a';
        // char转换为int,char类型使用ascii值进行计算
        int iVal1 = chVal0;
        System.out.println("chVal0=" + chVal0);
        System.out.println("iVal1=" + iVal1);

        // 整型向浮点型转换
        long lVal0 = 3;
        double dVal0 = lVal0;
        float fVal0 = lVal0;
        // 输出
        System.out.println("lVal0=" + lVal0);
        System.out.println("dVal0=" + dVal0);
        System.out.println("fVal0=" + fVal0);

        // byte和char之间不存在转换关系
        // char chVal1 = bVal0;
        // char和short之间不存在转换关系
        // short shVal3 = chVal0;
        // 混合表达式的结果类型为最高类型
        double result0 = bVal0 + shVal0 + lVal0 + dVal0;
        // 特别注意：如果表达式中只有byte、char、short三种类型，则表达式的结果类型固定为int类型；
        int result1 = bVal0 + shVal0 + chVal0;

        System.out.println("======================强制类型转换=======================");
        // 强制类型转换
        long lVal10 = 2000L;
        // 强制类型转换为int类型
        int iVal10 = (int) lVal10;

        // 强制类型转换为short类型
        short shVal10 = (short) lVal0;

        // 如果转换的目标类类型，可以默认转换为等号左侧的变量类型也可以；
        int iVal11 = (short) lVal0; // 先讲long类型强制转换为short类型，然后short类型再默认转换为int类型；

        System.out.println("lVal10=" + lVal10);
        System.out.println("iVal10=" + iVal10);
        System.out.println("shVal10=" + shVal10);
        System.out.println("iVal11=" + iVal11);
    }


    /**
     * 数据类型：char类型等重点类型的使用
     */
    private static void test01() {
        // int 类型
        int iVal0 = 19999;
        System.out.println("iVal1=" + iVal0);

        // byte类型
        byte bVal0 = 1;
        System.out.println("bVal0=" + bVal0);

        // long类型,使用后缀表示类型，告诉编译器这是long类型，不是默认的int类型
        long lVal0 = 199999999999999999L;
        System.out.println("lVal0=" + lVal0);

        // 浮点类型
        double dVal0 = 1.1;
        // 后缀标明类型
        float fVal0 = 1.1F;

        // char 类型
        char chVal1 = 'a'; // 英文
        char chVal2 = '小'; // 中文
        char chVal3 = '\u007c'; // Unicode码
        char chVal4 = '\n'; // 转义字符
        System.out.println("chVal1=" + chVal1 + ";chVal2=" + chVal2 + ";chVal3=" + chVal3);

    }
}
